package day10.yichang.demo;

//自定义异常步骤：
//写一个自己的异常类去继承Exception
//然后重写构造器（调用父类的构造器）
//就可以返回（抛出）我的自定义异常对象了

public class Exceptiondemo3
{
    public static void main(String[] args)
    {
//           try
//           {
//               saveage(0);//调用自定义编译异常
//               System.out.println("输入合法");
//           }catch (MyException e)//要和saveage抛出的异常类型对应
//               {
//                   e.printStackTrace();
//                   System.out.println(e.getMessage());
//               }


        try //这是处理
        {
            saveage2(0);//调用自定义运行异常
            System.out.println("输入合法");
        }catch (MyException2 e)//要和saveage2抛出的异常类型对应
        {
           e.printStackTrace();
            System.out.println(e.getMessage());
        }

       // saveage2(0);//调用自定义运行异常  这是不处理main会抛给虚拟机，程序就崩了，自己处理的话程序不会崩
    }


    public static void saveage(int age)throws MyException//编译时异常必须当场要抛出
    {
        if(age<1||age>200)
        {
            throw new MyException("年龄非法");//就算是void也能返回异常
        }
        return;
    }
    public static void saveage2(int age)//不需要throws Exception 自动抛了
    {
        if(age<1||age>200)
        {
            throw new MyException2("年龄非法");//就算是void也能返回异常
        }
        return;
    }

}

//写一个保存年龄的方法

class MyException extends Exception//自定义编译异常（编译阶段提醒程序员去处理冒红提醒）
{
    public MyException() {};
    public MyException(String msg)
    {
        super(msg);//调用父类exception的构造方法
    }
}
class MyException2 extends RuntimeException//自定义运行异常
{
    public MyException2() {};
    public MyException2(String msg)
    {
        super(msg);//调用父类exception的构造方法
    }
}
